from rest_framework.permissions import BasePermission
from .models import Vehicle
from user_app.models import User


class IsVehicleOwnerOrReadOnly(BasePermission):
    """
    自定义权限类：
    - 只有司机本人可以修改自己的车辆信息
    - 其他用户只能查看车辆信息
    """

    def has_permission(self, request, view):
        # 允许所有用户访问列表和详情视图（GET请求）
        if request.method in ['GET', 'HEAD', 'OPTIONS']:
            return True
        
        # 对于非GET请求，需要用户已认证
        if not (request.user and request.user.is_authenticated):
            return False
            
        # 对于创建/更新操作，只允许司机角色用户
        if request.method == 'POST':
            return request.user.role == User.Role.DRIVER
            
        return True

    def has_object_permission(self, request, view, obj):
        # 读取权限允许任何请求
        if request.method in ['GET', 'HEAD', 'OPTIONS']:
            return True
        
        # 写入权限只给车辆的所有者（司机）
        if isinstance(obj, Vehicle):
            return obj.user == request.user
        
        # 如果不是Vehicle对象，拒绝权限
        return False